class Solution {
    public int longestValidParentheses(String s) {
        //用stack的想法,如果匹配到的是"("的话，压入一个")"，当匹配到")"的话，看用stack中有没有元素

        // 《这么做的话，无法判断出连续的最长的有效长度》
        // Stack<Character> b = new Stack<Character>();
        // 改成想栈中压入下标，通过下标来计算最长值
        Stack<Integer> b = new Stack<Integer>();
        b.push(-1);
        int re = 0;
        // //挨个取出符号
        char[] c = s.toCharArray();
        int len = s.length();
        for( int i = 0; i < len ; i++ ){
            if(c[i] == '('){
                    b.push(i);
            }else{
                b.pop();
                if(b.isEmpty()){
                    b.push(i);
                }else{
                    re = Math.max(re, i-b.peek());
                }
            }
        }
        return re;
    }
}